package j.quartz.core.common.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
	
	
	
	
	
	/**
	 * 用来获取年月日 时分秒 日期时间
	 */
	static class Gain {
		private static final SimpleDateFormat format = new SimpleDateFormat() ;
		
		public static String str_yyyyMMdd() {
			format.applyPattern(Format.format_yyyyMMdd);
			return format.format(new Date());
		}
		public static String str_yyyy_MM_dd() {
			format.applyPattern(Format.format_yyyy_MM_dd);
			return format.format(new Date());
		}
		public static String str_yyyy_MM_dd_hh_mm_ss() {
			format.applyPattern(Format.format_yyyy_MM_dd_hh_mm_ss);
			return format.format(new Date());
		}
		public static String str_yyyyMMdd_hhmmss() {
			format.applyPattern(Format.format_yyyyMMdd_hhmmss);
			return format.format(new Date());
		}
		public static String str_yyyyMMddhhmmss() {
			format.applyPattern(Format.format_yyyyMMddhhmmss);
			return format.format(new Date());
		}
		public static String str_hh_mm_ss() {
			format.applyPattern(Format.format_hh_mm_ss);
			return format.format(new Date());
		}
		
		
		/**
* 【年】	  获取格式：1989
		 */
		public static String str_Year() {
			format.applyPattern(Format.format_yyyy);
			return format.format(new Date());
		}
		public static int int_Year() {
			return Integer.parseInt(str_Year());
		}
		
		
		
		/**
* 【月】	  获取格式：1 3 12
		 */
		public static String str_Month1() {
			return int_Month()+"";
		}
		/**
		 * 格式：01 03 12
		 */
		public static String str_Month2() {
			format.applyPattern(Format.format_MM);
			return format.format(new Date());
		}
		public static int int_Month() {
			return Integer.parseInt(str_Month2());
		}
		
		/**
* 【日】	  获取格式：
		 */
		public static String str_Day1() {
			return int_Day()+"";
		}
		/**
		 * 格式：
		 */
		public static String str_Day2() {
			format.applyPattern(Format.format_dd);
			return format.format(new Date());
		}
		public static int int_Day() {
			return Integer.parseInt(str_Day2());
		}
		
		
		/**
* 【小时】	  获取格式：1 3 12
		 */
		public static String str_Hour1() {
			return num_Hour()+"";
		}
		/**
		 *  获取格式：01 03 12
		 */
		public static String str_Hour2() {
			format.applyPattern(Format.format_hh);
			return format.format(new Date());
		}
		public static int num_Hour() {
			return Integer.parseInt(str_Hour2());
		}
		
		/**
* 【分钟】	  获取格式：1 3 12
		 */
		public static String str_Minute1() {
			return int_Minute()+"";
		}
		/**
		 *  获取格式：01 03 12
		 */
		public static String str_Minute2() {
			format.applyPattern(Format.format_mm);
			return format.format(new Date());
		}
		public static int int_Minute() {
			return Integer.parseInt(str_Minute2());
		}
		
		/**
* 【秒】	 	 获取格式：1 3 12
		 */
		public static String str_Second1() {
			return int_Second()+"";
		}
		/**
		 *  获取格式：01 03 12
		 */
		public static String str_Second2() {
			format.applyPattern(Format.format_ss);
			return format.format(new Date());
		}
		public static int int_Second() {
			return Integer.parseInt(str_Second2());
		}
		
		/**
		 * 毫秒
		 */
		public static String str_Millis() {
			format.applyPattern(Format.format_SSSS);
			return format.format(new Date());
		}
		public static int int_Millis() {
			return Integer.parseInt(str_Millis());
		}
		
		/**
		 * 当前时间长度毫秒数
		 */
		public static Long long_CurrTime() {
			return long_CurrTime(new Date()) ;
		}
		
		/**
		 * 获取某一时间的毫秒数
		 */
		public static Long long_CurrTime(Date date) {
			return date.getTime() ;
		}
		
		/**
		 * 根据时间格式字符串获取日期
		 * 转换异常则使用当前时间
		 */
		public static Date date_yyyyMMdd_No_Error(String yyyyMMdd) {
			return date_yyyyMMdd(yyyyMMdd,true);
		}
		/**
		 * 转换错误我抛出错误信息
		 */
		public static Date date_yyyyMMdd(String yyyyMMdd) {
			return date_yyyyMMdd(yyyyMMdd,false);
		}
		
		/**
		 * @param yyyyMMdd
		 * @param noError	true：转换异常使用当前时间 
		 * 					false：转换异常抛出错误信息
		 */
		public static Date date_yyyyMMdd(String yyyyMMdd,boolean noError) {
			format.applyPattern(Format.format_yyyyMMdd);
			try {
				return format.parse(yyyyMMdd);
			} catch (ParseException e) {
				if(noError) {
					return new Date() ;
				}
				throw new RuntimeException("年月日 时间格式转换异常，请检查书写格式是否正确！") ;
			}
		}
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		/**
		 * 根据时间格式字符串获取日期
		 * 转换异常则使用当前时间
		 */
		public static Date date_yyyy_MM_dd_No_Error(String yyyy_MM_dd) {
			return date_yyyy_MM_dd(yyyy_MM_dd,true) ;
		}
		/**
		 * 转换错误我抛出错误信息
		 */
		public static Date date_yyyy_MM_dd(String yyyy_MM_dd) {
			return date_yyyy_MM_dd(yyyy_MM_dd,false) ;
		}
		
		/**
		 * @param noError	true：转换异常使用当前时间 
		 * 					false：转换异常抛出错误信息
		 */
		public static Date date_yyyy_MM_dd(String yyyy_MM_dd,boolean noError) {
			format.applyPattern(Format.format_yyyy_MM_dd);
			try {
				return format.parse(yyyy_MM_dd);
			} catch (ParseException e) {
				if(noError) {
					return new Date() ;
				}
				throw new RuntimeException("年月日 时间格式转换异常，请检查书写格式是否正确！") ;
			}
		}
		
		
		
		/**
		 * 根据时间格式字符串获取日期
		 * 转换异常则使用当前时间
		 */
		public static Date date_yyyyMMdd_hhmmss_No_Error(String yyyyMMdd_hhmmss) {
			return date_yyyyMMdd_hhmmss(yyyyMMdd_hhmmss,true) ;
		}
		/**
		 * 转换错误我抛出错误信息
		 */
		public static Date date_yyyyMMdd_hhmmss(String yyyyMMdd_hhmmss) {
			return date_yyyyMMdd_hhmmss(yyyyMMdd_hhmmss,false) ;
		}
		
		/**
		 * @param noError	true：转换异常使用当前时间 
		 * 					false：转换异常抛出错误信息
		 */
		public static Date date_yyyyMMdd_hhmmss(String yyyyMMdd_hhmmss,boolean noError) {
			format.applyPattern(Format.format_yyyyMMdd_hhmmss);
			try {
				return format.parse(yyyyMMdd_hhmmss);
			} catch (ParseException e) {
				if(noError) {
					return new Date() ;
				}
				throw new RuntimeException("年月日 时间格式转换异常，请检查书写格式是否正确！") ;
			}
		}
		
		
		/**
		 * 根据时间格式字符串获取日期
		 * 转换异常则使用当前时间
		 */
		public static Date date_yyyy_MM_dd_hh_mm_ss_No_Error(String yyyy_MM_dd_hh_mm_ss) {
			return date_yyyy_MM_dd_hh_mm_ss(yyyy_MM_dd_hh_mm_ss,true) ;
		}
		/**
		 * 转换错误我抛出错误信息
		 */
		public static Date date_yyyy_MM_dd_hh_mm_ss(String yyyy_MM_dd_hh_mm_ss) {
			return date_yyyy_MM_dd_hh_mm_ss(yyyy_MM_dd_hh_mm_ss,false) ;
		}
		
		/**
		 * @param noError	true：转换异常使用当前时间 
		 * 					false：转换异常抛出错误信息
		 */
		public static Date date_yyyy_MM_dd_hh_mm_ss(String yyyy_MM_dd_hh_mm_ss,boolean noError) {
			format.applyPattern(Format.format_yyyy_MM_dd_hh_mm_ss);
			try {
				return format.parse(yyyy_MM_dd_hh_mm_ss);
			} catch (ParseException e) {
				if(noError) {
					return new Date() ;
				}
				throw new RuntimeException("年月日 时间格式转换异常，请检查书写格式是否正确！") ;
			}
		}
		
		
		
		
		
		
		
		
		
	}
	
	
	
	static class Format {
		private static String format_yyyyMMdd = "yyyyMMdd";
		private static String format_hh_mm_ss = "hh:mm:ss";
		private static String format_yyyy_MM_dd = "yyyy_MM_dd";
		private static String format_yyyy_MM_dd_hh_mm_ss = "yyyy_MM_dd hh:mm:ss";
		private static String format_yyyyMMdd_hhmmss = "yyyyMMdd hhmmss";
		private static String format_yyyyMMddhhmmss = "yyyyMMddhhmmss";
		private static String format_hh = "hh";
		private static String format_mm = "mm";
		private static String format_ss = "ss";
		private static String format_yyyy = "yyyy";
		private static String format_MM = "MM";
		private static String format_dd = "dd";
		private static String format_SSSS = "SSSS";
		
	}
	
	
	public static void main(String[] args) {
		System.out.println(
				DateUtil.Gain.str_Month1()
				);
	}
}
